function equalized_signal = channel_equalization(received_signal, channel_taps, original_signal)
% channel_equalization - 对经过多径信道的信号进行均衡
%
% 输入参数:
%   received_signal - 接收到的信号（经过多径信道和噪声）
%   channel_taps    - 信道抽头系数，复数向量
%   original_signal - 原始发送信号（仅用于计算均衡性能，实际系统中不可用）
%
% 输出参数:
%   equalized_signal - 均衡后的信号

% 在实际系统中，信道估计通常使用导频信号完成
% 这里为简化，我们假设已知信道，直接使用频域均衡

% 计算信道频率响应
channel_freq_response = fft(channel_taps, length(received_signal));

% 零强制均衡 (Zero Forcing Equalization)
% 在频域将接收信号除以信道频率响应
received_freq = fft(received_signal);
equalized_freq = received_freq ./ channel_freq_response;

% 防止除以过小的值导致噪声放大
min_gain = 0.01;
for i = 1:length(channel_freq_response)
    if abs(channel_freq_response(i)) < min_gain
        equalized_freq(i) = 0;  % 置零，避免噪声放大
    end
end

% 转回时域
equalized_signal = ifft(equalized_freq);

% 评估均衡效果
if nargin > 2
    orig_power = mean(abs(original_signal).^2);
    error_before = mean(abs(received_signal - original_signal).^2) / orig_power;
    error_after = mean(abs(equalized_signal - original_signal).^2) / orig_power;
    
    fprintf('信道均衡性能:\n');
    fprintf('  均衡前均方误差: %.4f\n', error_before);
    fprintf('  均衡后均方误差: %.4f\n', error_after);
    fprintf('  改善比例: %.2f 倍\n', error_before/error_after);
end

end 